package com.softer.wxzj.mapper;


import com.softer.wxzj.entity.*;
import com.softer.wxzj.mapper.base.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

@Repository
public interface BaseOwnerInfoMapper extends BaseMapper<BaseOwnerInfo> {

    /**
     * * 询当前登录账户管理下的小区业主（非保存状态和删除状态）的信息列表
     *
     * @param baseOwnerInfo
     * @return
     */
    List<BaseOwnerInfoList> getBaseOwnerInfoList(BaseOwnerInfoList baseOwnerInfo);

    /**
     * 根据业主id查询业主信息 返回实体
     *
     * @param id
     * @return
     */
    BaseOwnerInfo getBaseOwnerInfoModule(String id);

    /**
     * 新增或修改
     *
     * @param baseOwnerInfo
     * @return
     */
    int insertOrUpdate(BaseOwnerInfo baseOwnerInfo);

    /**
     * 根据房间id查询业主信息 返回实体
     *
     * @param id
     * @return
     */
    List<BaseOwnerInfo> getBaseOwnerInfoByAccNo(String id);

    BaseOwnerInfoMap getInfoMap(String id);

    /**
     * 查询详细信息
     *
     * @param id
     * @return
     */
    Map<String, String> getMapInfo(String id);

    /**
     * 修改业主状态
     *
     * @param id    房间ID
     * @param state 状态（是否当前业主 0 否 1 是）
     * @param name  修改人
     * @return 结果
     */
    int updateOwnerState(@Param("id") String id, @Param("state") String state, @Param("name") String name);

    /**
     * 模糊查询业主信息列表
     *
     * @param zoneCode 区域代码
     * @param fuzzy    模糊查询参数
     * @return 业主信息
     */
    List<BaseOwnerFuzzy> fuzzySearch(@Param("zoneCode") String zoneCode, @Param("fuzzy") String fuzzy);

    String checkOwner(BaseOwnerInfo baseOwnerInfo);

    /**
     * 根据房间ID查询业主和共有人
     *
     * @param houseId 房间Id
     * @return 结果
     */
    List<BaseOwnerInfoMap> getOwnerListByHouseId(String houseId);

    /**
     * 根据房间ID，查询业主的房屋基本信息
     *
     * @param houseId 房间ID
     * @return 房间基本信息
     */
    BaseOwnerInfoMap getOwnerHouseInfo(String houseId);

    /**
     * 根据房间id业主条数
     *
     * @param houseId
     * @return
     */
    int getCountByHouseId(String houseId);

    List<BaseOwnerInfo> selectId(String houseId);

    /**
     * 通过id查询单条信息
     *
     * @param id
     * @return
     */
    BaseOwnerInfo selectBaseOwnerInfo(String id);

    /**
     * 查询列表
     *
     * @param baseBuildInfo
     * @return
     */
    List<BaseOwnerInfoList> getNewList(BaseOwnerInfoList baseBuildInfo);

    /**
     * 根据房间号查询业主信息
     *
     * @param houseId
     * @return
     */
    List<BaseOwnerInfo> getInfoListByHouseId(String houseId);

    /**
     * 根据房间号查询业主信息
     *
     * @param houseId
     * @return
     */
    List<BaseOwnerInfo> getInfoListByHouseIdAll(String houseId);

    List<BaseOwnerInfo> getInfoListByHouseIdDelNow(String houseId);

    List<BaseOwnerInfo> getInfoListByHouseIdDel(String houseId);

    /**
     * 删除
     *
     * @param info
     * @param id
     * @return
     */
    int deleteOwner(@Param("info") int info, @Param("id") String id);

    /**
     * 根据房屋id查询业主附房列表
     *
     * @param accNo
     * @return
     */
    List<BaseOwnerInfo> getSubHouseList(String accNo);

    /**
     * 查询业主id
     *
     * @param houseId
     * @return
     */
    String selectOwnerId(String houseId);

    /**
     * 通过业主id查询该房屋的所有id
     */
    List<String> selectHouse(String ownerId);

    /**
     * 通过业主id查询关联付房的业主id
     *
     * @param id
     * @return
     */
    List<String> selectMain(String id);

    /**
     * 通过id查看是业主还是共有人
     */
    BaseOwnerInfo selectInfo(String id);

    /**
     * 根据房屋id删除业主、共有人
     *
     * @param accNo
     * @return
     */
    int deleteByAccNo(String accNo);

    /**
     * 根据房屋id删除当前业主、共有人（state= '1'）
     *
     * @param accNo
     * @return
     */
    int deleteCurrentByAccNo(String accNo);

    /**
     * 根据主房id删除附房业主信息
     *
     * @param ownerId
     * @return
     */
    int deleteByOwnerId(String ownerId);

    /**
     * 业主变更
     *
     * @param baseOwnerInfo
     * @return
     */
    int updateOwnerAndHouseByOwnerId(BaseOwnerInfo baseOwnerInfo);

    /**
     * 自然幢最大值
     *
     * @param id
     * @return
     */
    String selectMaxOwner(String id);

    /**
     * 查询该房屋的业主编号
     */
    String selectOwnerNoForAccNo(String accNo);

    String selectAllHouseId(String id);

    /**
     * 通过业主编号查询业主信息
     *
     * @param ownerNo
     * @param state
     * @return
     */
    List<BaseOwnerInfo> selectAllOwnerForOwnerNo(@Param("ownerNo") String ownerNo, @Param("state") String state);

    /**
     * 通过编号修改业主状态
     */
    int changeState(String ownerNo);

    /**
     * 查询旧业主值
     *
     * @param houseId
     * @return
     */
    int selectOwnerOldOwner(String houseId);

    /**
     * 业主过户改变旧业主状态
     */
    int changeOwnerState(@Param("houseId") String houseId, @Param("oldState") String oldState, @Param("newState") String newState);

    int changeOwnerStateForOwnerNo(@Param("ownerNo") String ownerNo, @Param("oldState") String oldState, @Param("newState") String newState);

    /**
     * 根据房屋id查询业主信息
     *
     * @param houseId
     * @return
     */
    BaseOwnerInfo selectOwner(String houseId);

    List<BaseOwnerInfo> selectOwnerByOwnerNo(String ownerNo);

    /**
     * 查询ownerNo和业主
     *
     * @return
     */
    BaseOwnerInfo selectOwnerInfoByOwnerNo(String ownerNo);

    List<BaseOwnerInfo> selectNewOwnerByOwnerNo(String ownerNo);

    /**
     * 根据房间id查询业主信息
     *
     * @param accNo
     * @return
     */
    BaseOwnerInfo getInfoByAccNo(String accNo);

    /**
     * 根据业主id查询附房业主id
     *
     * @param ownerId
     * @return
     */
    List<String> getIdListByOwnerId(String ownerId);

    /**
     * 根据业主id查询附房业主集合
     *
     * @param ownerId
     * @return
     */
    List<BaseOwnerInfo> getListByOwnerId(String ownerId);

    int updatState(@Param("ownerState") String ownerState, @Param("id") String id, @Param("oldState") String oldState);

    List<BaseOwnerInfoList> getNewListDep(BaseOwnerInfoList baseOwnerInfo);

    /**
     * 退款
     *
     * @param id
     * @return
     */
    List<BaseOwnerInfo> getOldInfoByAccNo(String id);

    List<BaseOwnerInfo> getInfoOldListByHouseId(String id);

    /**
     * @param map
     * @return
     */
    BaseOwnerInfo getChangeColumnByBus(Map<String, Object> map);

    /**
     * 销户删除业主
     *
     * @param ids
     * @return
     */
    int delOwners(String ids);

    /**
     * 查询该房屋下有没有业主
     *
     * @param ids
     * @return
     */
    int selectHouseOwner(String ids);

    /**
     * 查询状态
     *
     * @param id
     * @param state
     * @return
     */
    List<BaseOwnerInfo> selectOwnerByState(@Param("id") String id, @Param("state") String state);

    /**
     * 把最后一个业主改为业主
     *
     * @param id
     * @return
     */
    int updatStateByOwnerNo(String id);

    String selectByOwnerNo(String id);

    /**
     * 查询业主
     *
     * @param houseId
     * @return
     */
    BaseOwnerInfo getInfoByAccNoOwner(String houseId);

    /**
     * 查询房屋有没有过业主
     *
     * @param id
     * @return
     */
    int selectAllByOwner(String id);

    int updatStateByOwner(String ownerNo);

    /**
     * 通过业主id  更新
     * @param state
     * @param depReqLists
     * @return
     */
    int updatStateById(@Param("state") String state, @Param("depReqLists")String depReqLists);

    /**
     * 修改业主表
     * @param houseId
     * @param state
     * @return
     */
    int  updatAllState(@Param("houseId") String houseId,@Param("state") String state);

    /**
     * 修改业主及共有人信息
     * @param s
     * @param ownerId
     * @return
     */
    int updatStateByOwnerNoAll(@Param("state") String state,@Param("id") String id);
}
